class ErrorCodes:
    # 错误码及其意义
    ERROR_CODE_0 = "成功"
    ERROR_CODE_210 = "文件过大"
    ERROR_CODE_212 = "状态错误"
    ERROR_CODE_213 = "文件下载上传出错，丢包。"
    ERROR_CODE_214 = "下载文件的长度校验错误。"
    ERROR_CODE_215 = "缓冲长度不够"
    ERROR_CODE_217 = "控制器不支持或禁止的功能。"
    ERROR_CODE_218 = "调用传递的参数错误。"
    ERROR_CODE_219 = "下载冲突，同时启动了多个文件下载。"
    ERROR_CODE_220 = "文件名错误，有特殊字符。"
    ERROR_CODE_221 = "文件名错误，超过长度。"
    ERROR_CODE_222 = "文件不存在"
    ERROR_CODE_223 = "密码保护限制。"
    ERROR_CODE_224 = "密码保护限制2。"
    ERROR_CODE_260 = "硬件错误"
    ERROR_CODE_261 = "磁盘没有格式化"
    ERROR_CODE_262 = "RTC错误"
    ERROR_CODE_263 = "NORFLASH错误"
    ERROR_CODE_264 = "RAM错误"
    ERROR_CODE_265 = "NANDFLASH错误"
    ERROR_CODE_266 = "U盘错误"
    ERROR_CODE_267 = "FPGA错误"
    ERROR_CODE_268 = "以太网硬件错误"
    ERROR_CODE_271 = "备份电源错误"
    ERROR_CODE_272 = "子卡不存在"
    ERROR_CODE_273 = "文件丢失"
    ERROR_CODE_274 = "系统文件错误"
    ERROR_CODE_275 = "无主控，子卡上产生"
    ERROR_CODE_276 = "程序文件校验错误"
    ERROR_CODE_277 = "程序文件错误导致不启动"
    ERROR_CODE_278 = "ZAR校验APPPASS出错"
    ERROR_CODE_279 = "ZAR校验ID出错"
    ERROR_CODE_280 = "BAS文件超过最大数量"
    ERROR_CODE_281 = "子卡ID冲突，或多主冲突。"
    ERROR_CODE_282 = "不支持的功能"
    ERROR_CODE_284 = "zar与控制器不匹配"
    ERROR_CODE_285 = "图片文件错误"
    ERROR_CODE_286 = "字体文件错误"
    ERROR_CODE_288 = "以上异常，导致下次开机报错。"
    ERROR_CODE_1000 = "运动模块返回错误偏移"
    ERROR_CODE_1002 = "无运动缓冲"
    ERROR_CODE_1004 = "从轴运动中"
    ERROR_CODE_1005 = "不支持的运动功能"
    ERROR_CODE_1006 = "圆弧位置错误"
    ERROR_CODE_1007 = "椭圆AB参数错误"
    ERROR_CODE_1008 = "运动模块输入参数错误"
    ERROR_CODE_1009 = "运动中，无法操作"
    ERROR_CODE_1010 = "暂停等重复操作"
    ERROR_CODE_1011 = "IDLE无法做暂停等操作"
    ERROR_CODE_1012 = "当前运动不支持暂停"
    ERROR_CODE_1013 = "找不到暂停点"
    ERROR_CODE_1014 = "ATYPE不支持"
    ERROR_CODE_1015 = "ZCAN的ATYPE冲突"
    ERROR_CODE_1016 = "轴不支持的功能"
    ERROR_CODE_1017 = "FRAME校正数据错误"
    ERROR_CODE_1018 = "FRAME校正数据过少"
    ERROR_CODE_1019 = "FRAME校正数据满足条件的数据过少"
    ERROR_CODE_1020 = "FRAME校正数据辅助参数过少"
    ERROR_CODE_1021 = "FRAME校正数据间隔过小，小于关节轴数"
    ERROR_CODE_1022 = "FRAME的输入坐标错误"
    ERROR_CODE_1023 = "FRAME状态下坐标不能强制修改"
    ERROR_CODE_1024 = "FRAME逆解异常"
    ERROR_CODE_1025 = "不是FRAME状态"
    ERROR_CODE_1026 = "FRAMEHAND错误"
    ERROR_CODE_1027 = "姿态在插补中不能切换"
    ERROR_CODE_1028 = "特殊关节轴与虚拟轴当量要求一样。"
    ERROR_CODE_1030 = "CORNERMODE7位设置了但不支持此运动"
    ERROR_CODE_1031 = "CORNERMODE7位设置了但不是FRAME状态"
    ERROR_CODE_1032 = "AXIS_ADDRESS错误"
    ERROR_CODE_2000 = "ZBASIC模块偏移"
    ERROR_CODE_2021 = "手动停止"
    ERROR_CODE_2022 = "因其他任务错误导致本任务停止"
    ERROR_CODE_2023 = "试图修改只读状态参数"
    ERROR_CODE_2024 = "数组越界"
    ERROR_CODE_2025 = "变量数超过控制器规格"
    ERROR_CODE_2026 = "数组数超过控制器规格"
    ERROR_CODE_2027 = "数组空间超过控制器规格"
    ERROR_CODE_2028 = "SUB数超过控制器规格"
    ERROR_CODE_2029 = "标识符命名错误"
    ERROR_CODE_2030 = "标识符命名过长"
    ERROR_CODE_2031 = "没有右括号。"
    ERROR_CODE_2032 = "不认识的字符。"
    ERROR_CODE_2033 = "表达式中碰到不认识的名称。"
    ERROR_CODE_2034 = "SUB不能在表达式中使用"
    ERROR_CODE_2043 = "不认识的命令标识符，当前行第一个标识名称。"
    ERROR_CODE_2044 = "堆栈溢出"
    ERROR_CODE_2045 = "数学表达式太复杂，不同控制器的规格不一样。"
    ERROR_CODE_2046 = "没有找到结束引用标号"
    ERROR_CODE_2047 = "指令没有返回值，不能用于表达式计算。"
    ERROR_CODE_2048 = "函数必须返回值，不用在一行的开头地方。"
    ERROR_CODE_2049 = "特殊指令必须单独一行"
    ERROR_CODE_2050 = "参数或数组需要索引。"
    ERROR_CODE_2051 = "变量不能使用索引"
    ERROR_CODE_2052 = "数组重定义且长度不一致。"
    ERROR_CODE_2053 = "数组定义长度参数错误，负数或过大。"
    ERROR_CODE_2054 = "标识符已经定义为SUB过程，不能再做其他用途。"
    ERROR_CODE_2055 = "标识符已经定义为参数，不能再做其他用途。"
    ERROR_CODE_2056 = "标识符预留，不能使用。"
    ERROR_CODE_2057 = "出现不能识别的字符"
    ERROR_CODE_2058 = "SUB调用重复出栈。"
    ERROR_CODE_2060 = "语法格式错误"
    ERROR_CODE_2062 = "函数参数范围错误"
    ERROR_CODE_2063 = "函数参数过多"
    ERROR_CODE_2064 = "函数参数太少"
    ERROR_CODE_2065 = "缺少操作数"
    ERROR_CODE_2066 = "操作符后面缺少操作数"
    ERROR_CODE_2067 = "操作符前面缺少操作数"
    ERROR_CODE_2068 = "不认识的操作符"
    ERROR_CODE_2069 = "需要双目操作符"
    ERROR_CODE_2070 = "CALL必须调用SUB"
    ERROR_CODE_2072 = "需要赋值符号"
    ERROR_CODE_2073 = "空文件"
    ERROR_CODE_2074 = "SUB定义的标识符名称冲突。"
    ERROR_CODE_2075 = "要启动的任务已经运行中。"
    ERROR_CODE_2076 = "多个参数要使用逗号隔开。"
    ERROR_CODE_2077 = "括号不配对，无左括号。"
    ERROR_CODE_2078 = "IF判断的嵌套太多。"
    ERROR_CODE_2079 = "循环语句嵌套太多。"
    ERROR_CODE_2080 = "插补轴数太少。"
    ERROR_CODE_2081 = "CONST常量，不能修改。"
    ERROR_CODE_2082 = "命令不能从PC在线发送。"
    ERROR_CODE_2083 = "SUB定义的参数太多。"
    ERROR_CODE_2084 = "SUB带参数，不能用于GOTO语句。"
    ERROR_CODE_2085 = "局部标识符定义太多。"
    ERROR_CODE_2086 = "LOCAL变量名与文件变量名或其它标识符名称冲突。"
    ERROR_CODE_2087 = "LOCAL不支持数组定义。"
    ERROR_CODE_2088 = "GSUB定义的参数字母重复。"
    ERROR_CODE_2089 = "GSUB定义的参数只能为单字母。"
    ERROR_CODE_2090 = "不能修改只读参数。"
    ERROR_CODE_2091 = "GSUB_IFPARA函数使用场合错误。"
    ERROR_CODE_2092 = "除数为零"
    ERROR_CODE_2093 = "超过缓冲"
    ERROR_CODE_2094 = "在线命令阻赛时间过长。"
    ERROR_CODE_2095 = "参数重名"
    ERROR_CODE_2096 = "值没有初始化就使用了"
    ERROR_CODE_2097 = "轴号冲突"
    ERROR_CODE_2099 = "内部错误"
    ERROR_CODE_2100 = "SCANEDGE个数过多"
    ERROR_CODE_2101 = "ZINDEX类型不匹配"
    ERROR_CODE_2901 = "系统错误，定义的标识符过多。包括变量，数组，过程，过程参数等等。"
    ERROR_CODE_3201 = "超过缓冲"
    ERROR_CODE_3202 = "文件非正常结束"
    ERROR_CODE_3204 = "内部状态错误"
    ERROR_CODE_3205 = "不支持的功能"
    ERROR_CODE_3206 = "内部调用参数错误"
    ERROR_CODE_3231 = "资源不够"
    ERROR_CODE_3242 = "os错误"
    ERROR_CODE_3243 = "U盘没有插入"
    ERROR_CODE_3244 = "文件重复打开"
    ERROR_CODE_3245 = "文件过大"
    ERROR_CODE_3248 = "文件名错误"
    ERROR_CODE_3249 = "文件名过长"
    ERROR_CODE_3250 = "文件不存在"
    ERROR_CODE_3301 = "圆弧的三点在一条线上。"
    ERROR_CODE_3302 = "两条直线平行，没有交点。"
    ERROR_CODE_3401 = "MODBUS主端参数错误，一般长度超过"
    ERROR_CODE_3402 = "消息响应超时"
    ERROR_CODE_3407 = "Modbus返回参数错误"
    ERROR_CODE_3408 = "Modbus返回不支持"
    ERROR_CODE_3421 = "mobus从端返回不支持的功能码"
    ERROR_CODE_3422 = "mobus从端返回地址空间错误"
    ERROR_CODE_3423 = "modbus从端返回数据长度不对"
    ERROR_CODE_3424 = "modbus从端返回长度过长"
    ERROR_CODE_3501 = "ZCAN返回无子卡"
    ERROR_CODE_3502 = "ZCAN返回子卡无对应轴"
    ERROR_CODE_4000 = "4000-4500PLC模块的错误"
    ERROR_CODE_4002 = "参数错误"
    ERROR_CODE_4003 = "未知类型"
    ERROR_CODE_4004 = "未知函数"
    ERROR_CODE_4005 = "压栈太多STL"
    ERROR_CODE_4006 = "压栈太多"
    ERROR_CODE_4007 = "程序太复杂， BLOCK太多"
    ERROR_CODE_4008 = "没有压栈BLOCK"
    ERROR_CODE_4009 = "没有压栈STL"
    ERROR_CODE_4010 = "没有压栈"
    ERROR_CODE_4014 = "文件内容错误"
    ERROR_CODE_4015 = "RET必须在STL的后面"
    ERROR_CODE_4016 = "超过范围"
    ERROR_CODE_4017 = "低于范围"
    ERROR_CODE_4018 = "L没有定义"
    ERROR_CODE_4019 = "不支持G代码函数"
    ERROR_CODE_4020 = "不能GOTO跨PLC与BASIC"
    ERROR_CODE_4021 = "PLC主任务只有一个"
    ERROR_CODE_4022 = "语法错误"
    ERROR_CODE_4023 = "FORNEXT错误，不匹配"
    ERROR_CODE_4024 = "FORNEXT错误， 无NEXT"
    ERROR_CODE_4026 = "FORMC混用"
    ERROR_CODE_4027 = "FORSTL混用"
    ERROR_CODE_4030 = "必须PLC主任务中使用"
    ERROR_CODE_4031 = "必须中断中使用"
    ERROR_CODE_4032 = "参数个数少"
    ERROR_CODE_4033 = "参数个数多"
    ERROR_CODE_4034 = "要8的倍数"
    ERROR_CODE_4035 = "寄存器标识错误"
    ERROR_CODE_4036 = "寄存器类型错误"
    ERROR_CODE_4037 = "LV个数超过"
    ERROR_CODE_4038 = "只读"
    ERROR_CODE_4500 = "4500-5000PLC上位机端错误"
    ERROR_CODE_4503 = "内存不够"
    ERROR_CODE_4504 = "回流到母线上"
    ERROR_CODE_4505 = "回流"
    ERROR_CODE_4506 = "AND类型不能直接接母线"
    ERROR_CODE_4510 = "悬空"
    ERROR_CODE_4511 = "最右端必须是输出类型"
    ERROR_CODE_5000 = "5000-5500HMI模块的错误"
    ERROR_CODE_5002 = "LCD号冲突"
    ERROR_CODE_5003 = "不支持对象"
    ERROR_CODE_5004 = "内存不够"
    ERROR_CODE_5005 = "控件层次错误"
    ERROR_CODE_5006 = "窗口号超过"
    ERROR_CODE_5007 = "无效窗口号"
    ERROR_CODE_5010 = "对象属性丢失"
    ERROR_CODE_5011 = "输入窗口有多个显示元件"
    ERROR_CODE_5012 = "ACTION类型错误"
    ERROR_CODE_5013 = "事件过多"
    ERROR_CODE_5014 = "返回上个窗口失败"
    ERROR_CODE_5015 = "不能关闭基本窗口"
    ERROR_CODE_5016 = "字体中找不到对应字符"
    ERROR_CODE_5017 = "必须在HMI任务中使用"
    ERROR_CODE_5020 = "控件ID冲突"
    ERROR_CODE_5021 = "LCD号错误"
    ERROR_CODE_5022 = "找不到可用LCD"
    ERROR_CODE_5023 = "LCD没有打开"
    ERROR_CODE_5024 = "LCD无数据"
    ERROR_CODE_5025 = "程序复位"
    ERROR_CODE_5026 = "lcd已经打开了"
    ERROR_CODE_5027 = "不是网络LCD"
    ERROR_CODE_5028 = "不支持的压缩方式"
    ERROR_CODE_5029 = "颜色深度不支持"
    ERROR_CODE_5030 = "不支持的数据类型"
    ERROR_CODE_5031 = "设备号错误"
    ERROR_CODE_5032 = "LCD_SEL不能使用"
    ERROR_CODE_5033 = "设置REDRAW不能再DRAW阶段"
    ERROR_CODE_5034 = "DRAW函数只能在DRAW阶段"
    ERROR_CODE_5035 = "操作不能再DRAW阶段调用"
    ERROR_CODE_5036 = "内部LCD分辨率固定"
    ERROR_CODE_5037 = "LCD分辨率超过"
    ERROR_CODE_5038 = "库文件名错误"
    ERROR_CODE_5039 = "字符过多"
    ERROR_CODE_5501 = "5501-5599PC端PLC文件编译的错误"
    ERROR_CODE_5503 = "内存不够"
    ERROR_CODE_5504 = "回流到母线上"
    ERROR_CODE_5505 = "回流"
    ERROR_CODE_5506 = "AND类型指令不能直接接母线"
    ERROR_CODE_5510 = "右边悬空，没有接输出指令"
    ERROR_CODE_5511 = "最右边不是输出类型指令"
    ERROR_CODE_5512 = "最右边不能连接在一起"
    ERROR_CODE_5513 = "输出类型指令必须在最右边"
    ERROR_CODE_5514 = "不支持的指令类型"
    ERROR_CODE_5517 = "寄存器没有值"
    ERROR_CODE_5518 = "DOT值超过范围"
    ERROR_CODE_5519 = "索引寄存器超过范围"
    ERROR_CODE_5520 = "字符数过多"
    ERROR_CODE_5521 = "寄存器类型错误"
    ERROR_CODE_5522 = "寄存器值错误"
    ERROR_CODE_5523 = "寄存器个数过多"
    ERROR_CODE_5524 = "寄存器个数过少"
    ERROR_CODE_5525 = "STL使用错误"
    ERROR_CODE_5526 = "RET使用错误"
    ERROR_CODE_5527 = "重复RET"
    ERROR_CODE_5528 = "END或LBL的位置错误"
    ERROR_CODE_5529 = "函数不能直接接母线"
    ERROR_CODE_5530 = "出栈没有压栈"
    ERROR_CODE_5531 = "MPP太多"
    ERROR_CODE_5532 = "寄存器类型使用错误"
    ERROR_CODE_5533 = "ANB错误，块数不够"
    ERROR_CODE_5534 = "ORB错误，块数不够"
    ERROR_CODE_5535 = "ANB错误，输出操作后不能合并"
    ERROR_CODE_5536 = "ORB错误，输出操作后不能合并"
    ERROR_CODE_5537 = "AND直接接母线"
    ERROR_CODE_5538 = "OR直接接母线"
    ERROR_CODE_5539 = "OR不能在OUT指令的后面"
    ERROR_CODE_5540 = "STL和MC不能共用"
    ERROR_CODE_5541 = "MC不能直接接母线"
    ERROR_CODE_5542 = "_@寄存器要括号"
    ERROR_CODE_5543 = "注释错误"
    ERROR_CODE_5544 = "梯形图列数过多"
    ERROR_CODE_5545 = "输出类型不能直接接母线"
    ERROR_CODE_6000 = "ECAT模块错误，slot编号错误"
    ERROR_CODE_6001 = "内部错误， 功能不支持。"
    ERROR_CODE_6005 = "参数错误"
    ERROR_CODE_6006 = "支持的设备类型数超过限制"
    ERROR_CODE_6009 = "操作node超过从个数"
    ERROR_CODE_6012 = "资源不够"
    ERROR_CODE_6013 = "从设备反应超时"
    ERROR_CODE_6014 = "缓冲不够"
    ERROR_CODE_6015 = "应答包wkc错误"
    ERROR_CODE_6016 = "SDO应答超长"
    ERROR_CODE_6017 = "SDO应答错误"
    ERROR_CODE_6018 = "SDO应答数据长度错误"
    ERROR_CODE_6019 = "WKC超时"
    ERROR_CODE_6020 = "state切换超时"
    ERROR_CODE_6021 = "SDOABORT"
    ERROR_CODE_6023 = "NODEprofile错误"
    ERROR_CODE_6024 = "轴profile错误"
    ERROR_CODE_6025 = "轴数超过"
    ERROR_CODE_6029 = "PDO列表个数超过"
    ERROR_CODE_6031 = "设备个数超过"
    ERROR_CODE_6042 = "设备不支持"
    ERROR_CODE_6045 = "邮箱超时"
    ERROR_CODE_6047 = "数据类型错误"
    ERROR_CODE_6049 = "模块不支持的子模块"
    ERROR_CODE_6050 = "模块子模块数量超过"
    ERROR_CODE_6051 = "模块不认识的子模块"
    ERROR_CODE_6208 = "RTEX驱动ID冲突"
    ERROR_CODE_6209 = "扫描超时，一般为网线接触问题。"
    ERROR_CODE_6210 = "RTEX初始化失败"
    ERROR_CODE_6211 = "RTEX扫描结果错误"
    ERROR_CODE_20000 = "PC端产生错误的偏移"
    ERROR_CODE_20002 = "参数错"
    ERROR_CODE_20003 = "超时，可能是fifo缓冲阻塞"
    ERROR_CODE_20006 = "操作系统错误"
    ERROR_CODE_20007 = "串口打开失败"
    ERROR_CODE_20008 = "网络打开失败"
    ERROR_CODE_20009 = "句柄错误"
    ERROR_CODE_20010 = "发送错误"
    ERROR_CODE_20011 = "文件错误"
    ERROR_CODE_20012 = "文件长度错误"
    ERROR_CODE_20013 = "文件名过长"
    ERROR_CODE_20014 = "文件不存在"
    ERROR_CODE_20015 = "ZLB库文件错误"
    ERROR_CODE_20016 = "文件没有编译，一般PLC文件"
    ERROR_CODE_20020 = "固件文件不匹配"
    ERROR_CODE_20021 = "不支持的功能"
    ERROR_CODE_20030 = "输入缓冲长度不够"
    ERROR_CODE_20100 = "应答缓冲长度不够"
    ERROR_CODE_30000 = "以上是ZAUX辅助库产生的错误码辅助库源码直接搜索即可"
    ERROR_CODE_30000_2 = "无应答"
    ERROR_CODE_30001 = "应答错误"
    ERROR_CODE_30002 = "参数错误"
    ERROR_CODE_30003 = "不支持"
    ERROR_CODE_30004 = "文件参数错误"
    ERROR_CODE_30005 = "OS错误"
    ERROR_CODE_30006 = "单词发送数据超限"

    @staticmethod
    def get_error_message(error_code):
        """
        通过错误码获取对应的错误信息
        :param error_code: 错误码，以字符串形式输入，例如 'ERROR_CODE_210'
        :return: 错误信息，如果错误码不存在，返回 None
        """
        error_code = f'ERROR_CODE_{error_code}'
        error_code_attributes = dir(ErrorCodes)
        if error_code in error_code_attributes:
            return getattr(ErrorCodes, error_code)
        else:
            return None


if __name__ == "__main__":
    # 获取错误码 210 的错误信息
    error_message = ErrorCodes.get_error_message(210)
    print(error_message)  #
